package org.eiahe.hr.employeeRelation.service;

import org.eiahe.hr.employeeRelation.domain.bo.ContractInfoBo;
import org.eiahe.hr.employeeRelation.domain.bo.ContractRenewalApplicationBo;
import org.eiahe.hr.employeeRelation.domain.vo.ContractInfoVo;
import org.eiahe.hr.employeeRelation.domain.vo.ContractRenewalApplicationVo;
import org.ehe.common.mybatis.core.page.PageQuery;
import org.ehe.common.mybatis.core.page.TableDataInfo;

import java.util.List;

/**
 * 合同续签服务接口
 *
 * @author zhangnn
 */
public interface IContractRenewalService {

    /**
     * 查询合同信息列表
     *
     * @param bo 合同信息业务对象
     * @return 合同信息列表
     */
    List<ContractInfoVo> selectContractInfoList(ContractInfoBo bo);

    /**
     * 查询合同信息列表(分页)
     *
     * @param bo        合同信息业务对象
     * @param pageQuery 分页参数
     * @return 合同信息分页列表
     */
    TableDataInfo<ContractInfoVo> selectContractInfoList(ContractInfoBo bo, PageQuery pageQuery);

    /**
     * 通过合同ID查询合同信息
     *
     * @param contractId 合同ID
     * @return 合同信息
     */
    ContractInfoVo selectContractInfoById(Long contractId);

    /**
     * 新增合同信息
     *
     * @param bo 合同信息业务对象
     * @return 结果
     */
    Boolean insertContractInfo(ContractInfoBo bo);

    /**
     * 修改合同信息
     *
     * @param bo 合同信息业务对象
     * @return 结果
     */
    Boolean updateContractInfo(ContractInfoBo bo);

    /**
     * 批量删除合同信息
     *
     * @param contractIds 需要删除的合同ID数组
     * @return 结果
     */
    Boolean deleteContractInfoByIds(Long[] contractIds);

    /**
     * 查询续签申请列表
     *
     * @param bo 续签申请业务对象
     * @return 续签申请列表
     */
    List<ContractRenewalApplicationVo> selectContractRenewalApplicationList(ContractRenewalApplicationBo bo);

    /**
     * 查询续签申请列表(分页)
     *
     * @param bo        续签申请业务对象
     * @param pageQuery 分页参数
     * @return 续签申请分页列表
     */
    TableDataInfo<ContractRenewalApplicationVo> selectContractRenewalApplicationList(ContractRenewalApplicationBo bo,
            PageQuery pageQuery);

    /**
     * 通过申请ID查询续签申请
     *
     * @param applicationId 申请ID
     * @return 续签申请
     */
    ContractRenewalApplicationVo selectContractRenewalApplicationById(Long applicationId);

    /**
     * 新增续签申请
     *
     * @param bo 续签申请业务对象
     * @return 结果
     */
    Boolean insertContractRenewalApplication(ContractRenewalApplicationBo bo);

    /**
     * 修改续签申请
     *
     * @param bo 续签申请业务对象
     * @return 结果
     */
    Boolean updateContractRenewalApplication(ContractRenewalApplicationBo bo);

    /**
     * 批量删除续签申请
     *
     * @param applicationIds 需要删除的申请ID数组
     * @return 结果
     */
    Boolean deleteContractRenewalApplicationByIds(Long[] applicationIds);

    /**
     * 审批通过续签申请
     * 审批通过后自动：
     * 1. 更新续签申请的审批信息
     * 2. 将旧合同标记为“已续签”
     * 3. 生成一份新合同记录
     *
     * @param bo 续签申请业务对象
     * @return 结果
     */
    Boolean approveContractRenewal(ContractRenewalApplicationBo bo);

    /**
     * 审批拒绝
     * @param bo
     * @return
     */
    Boolean rejectContractRenewal(ContractRenewalApplicationBo bo);
}
